WSGI 和 ASGI 都是 Python 網頁開發的常見名詞, WSGI 為 Web Server Gateway Interface,ASGI 為 Asynchronous Server Gateway Interface。兩者主要功能一致,都是網路伺服器(如 Apache、Nginx等)和後端應用程式間通訊的接口標準,而基於 WSGI 或 ASGI 運行的伺服器才真正是兩者溝通的橋樑。需要橋樑存在的理由很簡單,因為網頁伺服器看不懂 Python,需要一定的翻譯才能運行順暢。同時,這樣可以將應用邏輯端和網路流量端拆分開來,各自只需關注自己的業務與強項,不必分心他物。假使有需要的話,也可以很輕易地更換相應的配套,適應業務場景,不必拘泥於綁定的系統。
它們的主要區別在於處理請求的方式和應用場景。就字面上來說,WSGI 和 ASGI 最大的差別在於,WSGI 是 Synchronous (同步的),而 ASGI 是 Asynchronous (非同步的)。
WSGI
全稱: Web Server Gateway Interface
同步處理: WSGI 是為同步 Web 應用程式設計的。每個請求在一個執行緒(Thread)或進程(Process)中處理,直到完成回應。適用於大多數傳統的 Web 應用,比如基於 Django 和 Flask 的應用。
性能限制: 由於 WSGI 的同步性,在處理 I/O 密集型任務(如資料庫查詢或與外部 API 的通信)時,可能會導致性能瓶頸(throttle),因為每個請求必須等待其他請求完成。
ASGI
全稱: Asynchronous Server Gateway Interface
非同步處理: ASGI 是為非同步 Web 應用程式設計的。它支援異步處理,允許在單個執行緒中處理多個請求。適合處理 WebSocket、Long Polling 等實時通訊需求,或者需要高併發的應用。
擴展性: ASGI 可以處理多種協議(HTTP、WebSocket 等),適合現代 Web 應用,特別是需要非同步處理的應用,比如基於 FastAPI 或 Django Channels 的應用。
適用場景:
WSGI 適用於傳統的 Web 應用程式和不需要異步處理的場景。
ASGI 適用於現代 Web 應用程式,特別是需要處理高併發或實時通訊的場景。